我們今天來介紹一份View的基本結構
以昨日的Form作為例子:
<odoo>
<record id="view_res_student_form" model="ir.ui.view">
<field name="name">res.student.form</field>
<field name="model">res.student</field>
<field name="arch" type="xml">
<form>
<field name="name"/>
<field name="nickname"/>
<field name="birthday"/>
<field name="math_score"/>
<field name="chinese_score"/>
<field name="avg_score"/>
<field name="gender"/>
<field name="school_id"/>
<field name="is_leadership"/>
<field name="is_active"/>
<field name="senior_id"/>
<field name="junior_ids"/>
<field name="teacher_ids" widget="many2many_tags"/>
</form>
</field>
</record>
</odoo>
以 <odoo><data></data></odoo>
包覆整份xml
<record>
: 定義一個View的標籤
id
: Odoo官方文件推薦寫法為 view,必須為唯一值,以便讓其他record參照。
model
: 定義此record為Odoo內的View,值為 ir.ui.view
.
<field name="name">res.student.form</field>
:為單純作為描述與幫助識別用。
<field name="model">res.student</field>
: View的關聯model
<field name="arch" type="xml">
: 代表定義xml底下的view
<form></form>
: 代表此view的type,同其他範例可為<list></list>
、<kanban></kanba>
剩下的就是內部view的規劃
<field name="name"/>
<field name="nickname"/>
<field name="birthday"/>
<field name="avg_score"/>
<field name="gender"/>
<field name="senior_id"/>
<field name="school_id"/>
<field name="is_leadership"/>
<field name="is_active"/>
最初就會如圖,依照field逐條列出。
我們以<sheet>
標籤將field集合成一張卡片
<form>
<sheet>
<field name="name"/>
<field name="nickname"/>
<field name="birthday"/>
<field name="math_score"/>
<field name="chinese_score"/>
<field name="avg_score"/>
<field name="gender"/>
<field name="school_id"/>
<field name="is_leadership"/>
<field name="is_active"/>
<field name="senior_id"/>
<field name="junior_ids"/>
<field name="teacher_ids" widget="many2many_tags"/>
</sheet>
</form>
我們可以以<group>
標籤區隔需要的區塊
<form>
<sheet>
<group>
<field name="name"/>
<field name="nickname"/>
<field name="birthday"/>
<field name="math_score"/>
<field name="chinese_score"/>
<field name="avg_score"/>
<field name="gender"/>
<field name="school_id"/>
</group>
<group>
<field name="is_leadership"/>
<field name="is_active"/>
<field name="senior_id"/>
<field name="junior_ids"/>
<field name="teacher_ids"/>
</group>
</sheet>
</form>
field內也有很多參數可以設置,我們將生日設為readonly='1'
常用於透過API新增,並讓使用者無法透過Odoo View去修改,並用attr去控制is_leadership
欄位在學生不在學的時候不會出現,讓畫面更有邏輯和客製化。
attr
: 設定field內參數,常來設置複數參數readonly
、invisible
寫法也會用到之前的domain來限制條件,基本上這兩個參數也建議在view裡面設定,避免在model裡面寫死。
widget
:對於不同的field type內,可以透過此欄內變更顯示,如此欄位選擇老師就會以tag的方式顯示,否則就會像學弟妹會以form的形式出現。
<form>
<sheet>
<group>
<field name="name"/>
<field name="nickname"/>
<field name="birthday" readonly="1"/>
<field name="math_score"/>
<field name="chinese_score"/>
<field name="avg_score"/>
<field name="gender"/>
<field name="school_id"/>
</group>
<group>
<field name="is_leadership" attrs="{'invisible': [('is_active', '=', False)]}"/>
<field name="is_active"/>
<field name="senior_id"/>
<field name="junior_ids"/>
<field name="teacher_ids" widget="many2many_tags"/>
</group>
</sheet>
</form>
基本的介紹就到這邊,其實View通常會回去看odoo source code裡的設定在做延伸,之後我們會做一個繼承延伸的應用,明天來介紹Odoo的search view。